Génération des graphiques pour la visualisation avec Plotly des données initiales de la CACPL

Pour un affichage interactif, merci de se référer à ce lien

Importation des librairies

In [1]:
import pandas as pd
from json import load
from sqlalchemy import create_engine
import plotly.express as px
In [2]:
# Pour affichage dynamique des graphiques Plotly sur GitHub
import plotly.offline as po
po.init_notebook_mode()

Connexion à la BDD

In [3]:
fichierConfig = "../../bdd/config.json"

with open(fichierConfig) as fichier:
    config = load(fichier)["mysql"]
    
engine = create_engine('mysql+' + config["connector"] + '://' + config["user"] + ":" + config["password"] + "@" + config["host"] + ":" + config["port"] + "/" + config["bdd"], echo=True)

Récupération et préparation des données

In [4]:
requeteCollecteurs = pd.read_sql_query("SELECT * FROM collecteur JOIN tri ON collecteur.idTri = tri.id LEFT JOIN marque ON collecteur.idMarque = marque.id LEFT JOIN categorie ON collecteur.idCategorie = categorie.id;", engine)
requeteDecheteries = pd.read_sql_query("SELECT * FROM decheterie;", engine)

dataCollecteurs = pd.DataFrame(requeteCollecteurs)
dataDecheteries = pd.DataFrame(requeteDecheteries)


# Renommage des colonnes types pour éviter les confusions (et les erreurs)
cols = []
isTri = True
for column in dataCollecteurs.columns:
    if column == "type":
        if isTri:
            cols.append("typeTri")
            isTri = False
        else:
            cols.append("typeCollecteur")
    else:
        cols.append(column)
dataCollecteurs.columns = cols

# Rajout d'une colonne villes par association code INSEE - ville depuis un dictionnaire (pour faciliter les affichages)
dictVilles = { "06029": "Cannes", "06030": "Le Cannet", "06079": "Mandelieu-la-Napoule", "06085": "Mougins", "06138": "Théoule-sur-Mer"}
for i in dataCollecteurs.index:
    dataCollecteurs.loc[i, "ville"] = dictVilles[dataCollecteurs.loc[i, "codeInsee"]]
dataCollecteurs.rename(columns={"ville": "Ville", "nom": "Marque", "volume": "Volume"}, inplace=True)

dataCollecteurs
2021-01-14 22:05:51,855 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'sql_mode'
2021-01-14 22:05:51,856 INFO sqlalchemy.engine.base.Engine {}
2021-01-14 22:05:51,861 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'lower_case_table_names'
2021-01-14 22:05:51,862 INFO sqlalchemy.engine.base.Engine {}
2021-01-14 22:05:51,868 INFO sqlalchemy.engine.base.Engine SELECT DATABASE()
2021-01-14 22:05:51,870 INFO sqlalchemy.engine.base.Engine {}
2021-01-14 22:05:51,873 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS CHAR(60)) AS anon_1
2021-01-14 22:05:51,875 INFO sqlalchemy.engine.base.Engine {}
2021-01-14 22:05:51,876 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS CHAR(60)) AS anon_1
2021-01-14 22:05:51,878 INFO sqlalchemy.engine.base.Engine {}
2021-01-14 22:05:51,880 INFO sqlalchemy.engine.base.OptionEngine SELECT * FROM collecteur JOIN tri ON collecteur.idTri = tri.id LEFT JOIN marque ON collecteur.idMarque = marque.id LEFT JOIN categorie ON collecteur.idCategorie = categorie.id;
2021-01-14 22:05:51,881 INFO sqlalchemy.engine.base.OptionEngine {}
2021-01-14 22:05:51,961 INFO sqlalchemy.engine.base.OptionEngine SELECT * FROM decheterie;
2021-01-14 22:05:51,962 INFO sqlalchemy.engine.base.OptionEngine {}
Out[4]:
objectid id Volume quantite dateInstallation adresse adresseComplement codeInsee observations createur ... idCategorie idTri idMarque id typeTri id Marque id typeCollecteur Ville
0 1 None 660.0 1 None Gare tsm None 06138 None chpayet ... 1.0 1 1.0 1 om 1.0 Plastic Omnium 1.0 Bac aérien avec cache bac Théoule-sur-Mer
1 2 None 660.0 3 None Résidence les terrasses de saint honorat None 06138 None chpayet ... 1.0 1 1.0 1 om 1.0 Plastic Omnium 1.0 Bac aérien avec cache bac Théoule-sur-Mer
2 3 None 660.0 1 None Prince des iles None 06138 None chpayet ... 2.0 1 1.0 1 om 1.0 Plastic Omnium 2.0 Bac aérien sans cache bac Théoule-sur-Mer
3 4 None 660.0 1 None Avenue de lerins trottoir de l eglise None 06138 None chpayet ... 2.0 1 1.0 1 om 1.0 Plastic Omnium 2.0 Bac aérien sans cache bac Théoule-sur-Mer
4 5 None 660.0 1 None Avenue de lerins angle traverse magasin souvenirs None 06138 None chpayet ... 2.0 1 1.0 1 om 1.0 Plastic Omnium 2.0 Bac aérien sans cache bac Théoule-sur-Mer
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
962 963 None NaN 1 None 1102 avenue du maréchal juin None 06085 None chpayet ... NaN 5 NaN 5 vêtement NaN None NaN None Mougins
963 964 None NaN 1 None Chemin de la plaine None 06085 None chpayet ... NaN 5 NaN 5 vêtement NaN None NaN None Mougins
964 965 None NaN 1 None Chemin du refuge None 06085 None chpayet ... NaN 5 NaN 5 vêtement NaN None NaN None Mougins
965 966 None NaN 3 None Avenue lamartine None 06085 None chpayet ... NaN 5 NaN 5 vêtement NaN None NaN None Mougins
966 967 None NaN 1 None Chemin de coudouron Déchèterie 06085 None chpayet ... NaN 5 NaN 5 vêtement NaN None NaN None Mougins

967 rows × 26 columns

Affichage des graphiques

In [5]:
# Jeu de couleurs de la CACPL
dictVillesCouleurs = {"Cannes": "#7bc3b7", "Le Cannet": "#528238", "Mandelieu-la-Napoule": "#fab55a", "Mougins": "#e84e2c", "Théoule-sur-Mer": "#507999"}
# Jeu de couleurs utilisé pour les icones des collecteurs de la carte
dictTrisCouleurs = {"om": "#bf3932", "papier": "#3e8ecc", "emballage": "#c0b132", "verre": "#35c032", "vêtement": "#31a9be"}
In [6]:
fig = px.histogram(dataCollecteurs, x="Ville", color="Ville", width=900, color_discrete_map=dictVillesCouleurs, title="Nombre de sites de collecteurs par ville")
fig.update_xaxes(categoryorder="total descending")
fig.update_layout(yaxis_title="Nombre")
In [7]:
# Utilisation de l'histogramme
# Ne marche pas si des valeurs non définies
fig = px.histogram(dataCollecteurs, x="Ville", y="quantite", histfunc="sum", color="Ville", color_discrete_map=dictVillesCouleurs, width=900, title="Nombre de collecteurs par ville")
fig.update_xaxes(categoryorder="total descending")
fig.update_layout(yaxis_title="Nombre")
In [8]:
# Utilisation du diagramme à barres
dataCollecteursQuantiteVille = dataCollecteurs.groupby(by=["Ville"])["quantite"].sum().reset_index(name="quantite")

fig = px.bar(dataCollecteursQuantiteVille, x="Ville", y="quantite", color="Ville", width=900, color_discrete_map=dictVillesCouleurs, title="Nombre de collecteurs par ville")
fig.update_xaxes(categoryorder="total descending")
fig.update_layout(yaxis_title="Nombre")
In [9]:
dataSitesCollecteursQuantiteMarque = dataCollecteurs.groupby(by=["Marque"])["quantite"].count().reset_index()

fig = px.bar(dataSitesCollecteursQuantiteMarque, x="Marque", y="quantite", color="Marque", width=900, title="Nombre de sites de collecteurs par marque")
fig.update_xaxes(categoryorder="total descending")
fig.update_layout(yaxis_title="Nombre")
In [10]:
fig = px.histogram(dataCollecteurs, x="Marque", color="Ville", color_discrete_map=dictVillesCouleurs, width=900, title="Nombre de sites de collecteurs par marque et par ville")
fig.update_xaxes(categoryorder="total descending")
fig.update_layout(yaxis_title="Nombre")
In [11]:
fig = px.histogram(dataCollecteurs, x="Marque", color="Ville", color_discrete_map=dictVillesCouleurs, width=900, title="Nombre de sites de collecteurs par marque et par ville")
fig.update_xaxes(categoryorder="total descending")
fig.update_layout(barmode='group', yaxis_title="Nombre")
In [12]:
dataCollecteursQuantiteMarque = dataCollecteurs.groupby(by=["Marque"])["quantite"].sum().reset_index(name="Nombre")

fig = px.bar(dataCollecteursQuantiteMarque, x="Marque", y="Nombre", color="Marque", width=900, title="Nombre de collecteurs par marque")
fig.update_xaxes(categoryorder="total descending")
In [13]:
fig = px.histogram(dataCollecteurs, x="Marque", y="quantite", histfunc="sum", color="Ville", color_discrete_map=dictVillesCouleurs, width=900, title="Nombre de collecteurs par marque et par ville")
fig.update_xaxes(categoryorder="total descending")
fig.update_layout(yaxis_title="Nombre")
In [14]:
fig = px.histogram(dataCollecteurs, x="Marque", y="quantite", histfunc="sum", color="Ville", color_discrete_map=dictVillesCouleurs, width=900, title="Nombre de collecteurs par marque et par ville")
fig.update_xaxes(categoryorder="total descending")
fig.update_layout(barmode="group", yaxis_title="Nombre")
In [15]:
dataSitesCollecteursQuantiteVolume = dataCollecteurs.groupby(by=["Volume"]).count().reset_index()

fig = px.bar(dataSitesCollecteursQuantiteVolume, x="Volume", y="quantite", color="Volume", width=900, title="Nombre de sites de collecteurs par volume (en L)")
fig.update_layout(yaxis_title="Nombre")
In [16]:
fig = px.histogram(dataCollecteurs, x="Volume", color="Ville", color_discrete_map=dictVillesCouleurs, width=900, title="Nombre de sites de collecteurs par volume (en L) et par ville")
fig.update_xaxes(categoryorder="total descending")
fig.update_layout(yaxis_title="Nombre")
In [17]:
fig = px.histogram(dataCollecteurs, x="Volume", color="Ville", color_discrete_map=dictVillesCouleurs, width=900, title="Nombre de sites de collecteurs par volume (en L) et par ville")
fig.update_xaxes(categoryorder="total descending")
fig.update_layout(barmode='group', yaxis_title="Nombre")
In [18]:
fig = px.bar(dataSitesCollecteursQuantiteVolume, x="Volume", y="quantite", color="Volume", width=900, title="Nombre de sites de collecteurs par volume (en L)")
fig.update_xaxes(type="category")
fig.update_layout(yaxis_title="Nombre")
In [19]:
dataSitesCollecteursQuantiteVolumeVille = dataCollecteurs.groupby(by=["Volume", "Ville"]).count().reset_index()
In [20]:
fig = px.bar(dataSitesCollecteursQuantiteVolumeVille, x="Volume", y="quantite", color="Ville", color_discrete_map=dictVillesCouleurs, width=900, title="Nombre de sites de collecteurs par volume (en L)")
fig.update_xaxes(type="category")
fig.update_layout(yaxis_title="Nombre")
In [21]:
fig = px.bar(dataSitesCollecteursQuantiteVolumeVille, x="Volume", y="quantite", color="Ville", color_discrete_map=dictVillesCouleurs, width=900, title="Nombre de sites de collecteurs par volume (en L)")
fig.update_xaxes(type="category")
fig.update_layout(barmode='group', yaxis_title="Nombre")
In [22]:
dataCollecteursQuantiteVolume = dataCollecteurs.groupby(by=["Volume"])["quantite"].sum().reset_index(name="quantite")
In [23]:
px.bar(dataCollecteursQuantiteVolume, x="Volume", y="quantite", color="Volume", width=900, title="Nombre de collecteurs par volume (en L)")
fig.update_layout(yaxis_title="Nombre")
In [24]:
dataCollecteursQuantiteVolumeVille = dataCollecteurs.groupby(by=["Volume", "Ville"])["quantite"].sum().reset_index(name="quantite")
In [25]:
fig = px.bar(dataCollecteursQuantiteVolumeVille, x="Volume", y="quantite", color="Ville", width=900, color_discrete_map=dictVillesCouleurs, title="Nombre de collecteurs par volume (en L) et par ville")
fig.update_xaxes(categoryorder="total descending")
fig.update_layout(yaxis_title="Nombre")
In [26]:
fig = px.bar(dataCollecteursQuantiteVolumeVille, x="Volume", y="quantite", color="Ville", width=900, color_discrete_map=dictVillesCouleurs, title="Nombre de collecteurs par volume (en L) et par ville")
fig.update_xaxes(categoryorder="total descending")
fig.update_layout(barmode='group', yaxis_title="Nombre")
In [27]:
fig = px.bar(dataCollecteursQuantiteVolume, x="Volume", y="quantite", color="Volume", width=900, title="Nombre de collecteurs par volume (en L)")
fig.update_xaxes(type="category")
fig.update_layout(yaxis_title="Nombre")
In [28]:
fig = px.bar(dataCollecteursQuantiteVolumeVille, x="Volume", y="quantite", color="Ville", color_discrete_map=dictVillesCouleurs, width=900, title="Nombre de collecteurs par volume (en L)")
fig.update_xaxes(type="category")
fig.update_layout(yaxis_title="Nombre")
In [29]:
fig = px.bar(dataCollecteursQuantiteVolumeVille, x="Volume", y="quantite", color="Ville", color_discrete_map=dictVillesCouleurs, width=900, title="Nombre de collecteurs par volume (en L)")
fig.update_xaxes(type="category")
fig.update_layout(barmode='group', yaxis_title="Nombre")
In [30]:
dataSitesCollecteursQuantiteType = dataCollecteurs.groupby(by=["typeCollecteur"])["quantite"].count().reset_index()

fig = px.bar(dataSitesCollecteursQuantiteType, x="typeCollecteur", y="quantite", color="typeCollecteur", width=900, title="Nombre de sites de collecteurs par type de collecteur")
fig.update_xaxes(categoryorder="total descending")
fig.update_layout(xaxis_title="Type de collecteur", yaxis_title="Nombre")
In [31]:
fig = px.histogram(dataCollecteurs, x="typeCollecteur", color="Ville", width=900, color_discrete_map=dictVillesCouleurs, title="Nombre de sites de collecteurs par type de collecteur et par ville")
fig.update_xaxes(categoryorder="total descending")
fig.update_layout(xaxis_title="Type de collecteur", yaxis_title="Nombre")
In [32]:
fig = px.histogram(dataCollecteurs, x="typeCollecteur", color="Ville", width=900, color_discrete_map=dictVillesCouleurs, title="Nombre de sites de collecteurs par type de collecteur et par ville")
fig.update_xaxes(categoryorder="total descending")
fig.update_layout(barmode='group', xaxis_title="Type de collecteur", yaxis_title="Nombre")
In [33]:
dataCollecteursQuantiteType = dataCollecteurs.groupby(by=["typeCollecteur"])["quantite"].sum().reset_index(name="quantite")

fig = px.bar(dataCollecteursQuantiteType, x="typeCollecteur", y="quantite", color="typeCollecteur", width=900, title="Nombre de collecteurs par type de collecteur")
fig.update_xaxes(categoryorder="total descending")
fig.update_layout(xaxis_title="Type de collecteur", yaxis_title="Nombre")
In [34]:
fig = px.histogram(dataCollecteurs, x="typeCollecteur", y="quantite", histfunc="sum", color="Ville", color_discrete_map=dictVillesCouleurs, width=900, title="Nombre de collecteurs par type de collecteur et par ville")
fig.update_xaxes(categoryorder="total descending")
fig.update_layout(xaxis_title="Type de collecteur", yaxis_title="Nombre")
In [35]:
fig = px.histogram(dataCollecteurs, x="typeCollecteur", y="quantite", histfunc="sum", color="Ville", color_discrete_map=dictVillesCouleurs, width=900, title="Nombre de collecteurs par type de collecteur et par ville")
fig.update_xaxes(categoryorder="total descending")
fig.update_layout(barmode='group', xaxis_title="Type de collecteur", yaxis_title="Nombre")
In [36]:
fig = px.histogram(dataCollecteurs, x="typeTri", color="typeTri", width=900, title="Nombre de sites de collecteurs par type de tri")
fig.update_xaxes(categoryorder="total descending")
fig.update_layout(xaxis_title="Type de tri", yaxis_title="Nombre")
In [37]:
fig = px.histogram(dataCollecteurs, x="typeTri", color="Ville", color_discrete_map=dictVillesCouleurs, width=900, title="Nombre de sites de collecteurs par type de tri et par ville")
fig.update_xaxes(categoryorder="total descending")
fig.update_layout(xaxis_title="Type de tri", yaxis_title="Nombre")
In [38]:
fig = px.histogram(dataCollecteurs, x="typeTri", color="Ville", color_discrete_map=dictVillesCouleurs, width=900, title="Nombre de sites de collecteurs par type de tri et par ville")
fig.update_xaxes(categoryorder="total descending")
fig.update_layout(barmode='group', xaxis_title="Type de tri", yaxis_title="Nombre")
In [39]:
fig = px.histogram(dataCollecteurs, x="typeTri", y="quantite", histfunc="sum", color="typeTri", color_discrete_map=dictTrisCouleurs, width=900, title="Nombre de collecteurs par type de tri")
fig.update_xaxes(categoryorder="total descending")
fig.update_layout(xaxis_title="Type de tri", yaxis_title="Nombre")
In [40]:
fig = px.histogram(dataCollecteurs, x="typeTri", y="quantite", histfunc="sum", color="Ville", color_discrete_map=dictVillesCouleurs, width=900, title="Nombre de collecteurs par type de tri et par ville")
fig.update_xaxes(categoryorder="total descending")
fig.update_layout(xaxis_title="Type de tri", yaxis_title="Nombre")
In [41]:
fig = px.histogram(dataCollecteurs, x="typeTri", y="quantite", histfunc="sum", color="Ville", color_discrete_map=dictVillesCouleurs, width=900, title="Nombre de collecteurs par type de tri et par ville")
fig.update_xaxes(categoryorder="total descending")
fig.update_layout(barmode="group", xaxis_title="Type de tri", yaxis_title="Nombre")
In [42]:
fig = px.histogram(dataCollecteurs, x="Ville", color="typeTri", color_discrete_map=dictTrisCouleurs, width=900, title="Nombre de sites de collecteurs par ville et par type de tri")
fig.update_xaxes(categoryorder="total descending")
fig.update_layout(barmode="group", yaxis_title="Nombre", legend_title="Type de tri")
In [43]:
fig = px.histogram(dataCollecteurs, x="Ville", y="quantite", histfunc="sum", color="typeTri", color_discrete_map=dictTrisCouleurs, width=900, title="Nombre de collecteurs par ville et par type de tri")
fig.update_xaxes(categoryorder="total descending")
fig.update_layout(barmode="group", yaxis_title="Nombre", legend_title="Type de tri")
In [44]:
px.pie(dataCollecteurs, names="Ville", color="Ville", color_discrete_map=dictVillesCouleurs, title="Répartition des sites de collecteurs par ville")
In [45]:
px.pie(dataCollecteursQuantiteVille, values="quantite", names="Ville", color="Ville", color_discrete_map=dictVillesCouleurs, title="Répartition des collecteurs par ville")
In [46]:
px.pie(dataCollecteurs, names="typeTri", color="typeTri", color_discrete_map=dictTrisCouleurs, title="Répartition des sites de collecteurs par type de tri")
In [47]:
dataCollecteursQuantiteTri = dataCollecteurs.groupby(by=["typeTri"])["quantite"].sum().reset_index(name="quantite")

px.pie(dataCollecteursQuantiteTri, values="quantite", names="typeTri", color="typeTri", color_discrete_map=dictTrisCouleurs, title="Répartition des collecteurs par type de tri")
In [48]:
px.sunburst(dataCollecteurs, path=["Ville", "typeTri"], color="Ville", color_discrete_map=dictVillesCouleurs, title="Répartition des sites de collecteurs par ville et par type de tri")
In [49]:
px.sunburst(dataCollecteurs, path=["typeTri", "Ville"], color="typeTri", color_discrete_map=dictTrisCouleurs, title="Répartition des sites de collecteurs par type de tri et par ville")
In [50]:
px.sunburst(dataCollecteurs, path=["Ville", "typeTri"], values="quantite", color="Ville", color_discrete_map=dictVillesCouleurs, title="Répartition des collecteurs par ville et par type de tri")
In [51]:
px.sunburst(dataCollecteurs, path=["typeTri", "Ville"], values="quantite", color="typeTri", color_discrete_map=dictTrisCouleurs, title="Répartition des collecteurs par type de tri et par ville")